package com.b2mining.integration.controllers;

import java.io.FileReader;
import java.io.Reader;
//import java.io.StringReader;
import java.util.ArrayList;
//import java.util.Iterator;

import org.apache.log4j.Logger;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.xml.Unmarshaller;
import org.xml.sax.InputSource;

import com.b2mining.integration.beans.Empresa;
import com.b2mining.integration.beans.SOCIEDADES;
//import com.b2mining.integration.helper.Helper;

/**
 * Clase 
 * @since 11/02/2008
 * @author Richard <BR>
 * Analista Programador: Richard Linares
 */
public class XMLEmpresasController {
	static Mapping map;
	static boolean mappingCargado;
	static ArrayList empresas;
	static XMLEmpresasController controller;
	private Logger log = Logger.getLogger(this.getClass());
	private XMLEmpresasController(){
		map = new Mapping();
		try{
			map.loadMapping("ConfigXML/empresasMapping.xml");
			mappingCargado = true;
		}
		catch(Exception e){
			log.debug("Error en cargar el mapping "+e.getMessage());
			e.printStackTrace();
			mappingCargado = false;
		}
		if(mappingCargado)
			empresas = cargarEmpresas();
	}
	
	public static XMLEmpresasController getInstance(){
		if(controller==null)
			controller=new XMLEmpresasController();
		return controller;
	}
	
	//ya modificado, no tocar
	/*public Empresa buscarEmpresa (String vc_ruc){
		log.debug("vc_ruc q llega: "+vc_ruc);
		Empresa empresa = new Empresa();
		if(empresas!=null){
			log.debug("empresas no es nulo jeje :)");
			if(empresas.size()>0){
				log.debug("empresas tiene al menos 1 item dentro");
				Iterator it = empresas.iterator();
				
				if (vc_ruc.length()==11){
					while(it.hasNext()){
						Empresa temp = (Empresa) it.next();
						if(temp.getRUC().equalsIgnoreCase(vc_ruc.trim())){
							log.debug("comparando: "+temp.getRUC()+" con: "+vc_ruc);
							empresa = temp;
							break;
						}
					}
				}else if(vc_ruc.length()==13){
					while(it.hasNext()){
						Empresa temp = (Empresa) it.next();
						if(temp.getRUC().substring(2).equalsIgnoreCase(vc_ruc.trim())){
							log.debug("comparando: "+temp.getRUC().substring(2)+" con: "+vc_ruc);
							empresa = temp;
							break;
						}
					}
				}
			}else{
				log.debug("empresas tiene 0 items");
			}
		}
		else{
			log.debug("Empresas es nuloooooooo faq!!!");
		}
		log.debug(""+empresa.getRAZONSOCIAL());
		return empresa;
	}*/

	public Empresa cargarinfoEmpresa(String rucCliente) {
		// TODO Auto-generated method stub
		//XMLEmpresasController micont=XMLEmpresasController.getInstance();
		//ArrayList<Empresa> arraybusqueda= micont.getEmpresas();
		ArrayList<Empresa> arraybusqueda=empresas;
		if (arraybusqueda.size()>0)
			log.debug("tamao de arraybusqueda: "+arraybusqueda.size());
		else
			log.debug("arraybusqueda esta vacio !! ");
		Empresa temporal=new Empresa();
		
		if(rucCliente.length()==11){
			for(int g=0;g<arraybusqueda.size();g++){
				log.debug("comparando >>> arraybusqueda.get(g).getRUC():"+arraybusqueda.get(g).getRUC().substring(2)+" y rucCliente: "+rucCliente);
				if(arraybusqueda.get(g).getRUC().substring(2).equalsIgnoreCase(rucCliente)){
					temporal= arraybusqueda.get(g);
					break;
				}	
			}
		}else if(rucCliente.length()==13){
			for(int g=0;g<arraybusqueda.size();g++){
				log.debug("comparando >>> arraybusqueda.get(g).getRUC():"+arraybusqueda.get(g).getRUC()+" y rucCliente: "+rucCliente);
				if(arraybusqueda.get(g).getRUC().equalsIgnoreCase(rucCliente)){
					temporal= arraybusqueda.get(g);
					break;
				}	
			}
		}
		
		log.debug("sabeeeeeee: "+temporal.getRAZONSOCIAL());
		return temporal;
	}
	
	public static ArrayList cargarEmpresas() {
		// TODO Auto-generated method stub
		Logger log = Logger.getLogger(XMLEmpresasController.class);
		ArrayList emps = null;
		try{
			if(mappingCargado){
				log.debug("Mapping cargado satisfactoriamente");
				Unmarshaller unmar = new Unmarshaller(map);
		        Reader reader = new FileReader("ConfigXML/empresas.xml");

		        InputSource is = new InputSource(reader);
		        //InputSource is = new InputSource(reader);
		        SOCIEDADES sociedades = (SOCIEDADES) unmar.unmarshal(is);
		        if(sociedades != null){
		        	emps = sociedades.getEmpresa();
		        }
		        reader.close();
			}
		}
		catch(Exception e){
			log.debug("Error al cargar las sociedades "+e.getMessage());
		}
		
		return emps;
	}
	
	public static ArrayList getEmpresas(){
		return empresas;
	}
}
